import vToast from './Toast.vue';
/**
 * Toast 模块
 */
let Toast = {};
// 队列数组
let msgArr = [];
Toast.install = function (Vue, options = {}) {
  // 默认参数
  let opt = {
    time: 2500
  };
  for (const key in options) {
    if (options.hasOwnProperty(key)) {
      opt[key] = options[key];
    }
  }
  /**
  * 添加Toast到异步队列
  * @param {number} time 持续时间
  */
  async function addToast(time) {
    // 等待Promise执行
    await new Promise((req, err) => {
      try {
        // 加载模板
        let T = Vue.extend(vToast);
        // 挂载
        let oT = new T().$mount();
        // 返回并删除第一个元素 赋值给模板内的msg
        oT.msg = msgArr.shift();
        // 追加
        document.body.appendChild(oT.$el);
        // 在指定的时间后删除
        setTimeout(() => {
          // 删除
          document.body.removeChild(oT.$el);
          // 如果还有
          if (msgArr.length != 0) {
            // 调用自身，继续执行（递归）
            addToast(time);
          }
          // 完成
          req();
        }, time);
      } catch (error) {
        err(error);
      }
    });
  }
  Vue.prototype.$toast = async msg => {
    // 如果已经存在 vue-toast 
    if (document.getElementsByClassName("vue-toast").length) {
      // 将其参数追加到队列尾部
      msgArr.push(msg);
      // 跳出
      return;
    }
    // 不存在 添加到队列，并调用addToast
    msgArr.push(msg);
    await addToast(opt.time);
  };
};

export default Toast;